package com.fy.service;

import com.fy.utils.result.Result;
import io.reactivex.rxjava3.core.Observable;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;
import java.util.concurrent.CompletableFuture;

public interface AIService {
  /**
   *  获取流式回复
   * @param message
   * @return
   */
  Observable<String> streamChat(String message);


  /**
   * Word转PDF
   */
  CompletableFuture<byte[]> wordToPdf(MultipartFile file);

  /**
   * Excel转PDF
   */
  CompletableFuture<byte[]> excelToPdf(MultipartFile file);

  /**
   * Word转HTML
   */
  CompletableFuture<String> wordToHtml(MultipartFile file);

  /**
   * Excel转HTML
   */
  CompletableFuture<String> excelToHtml(MultipartFile file);

  /**
   * 语音转文字
   */
  CompletableFuture<String> speechToText(MultipartFile file);

  /**
   * 音频格式转换
   * 
   * @param format 目标格式 (mp3, wav, ogg, etc.)
   */
  CompletableFuture<byte[]> convertAudioFormat(MultipartFile file, String format);

  /**
   * 获取音频时长
   */
  CompletableFuture<Long> getAudioDuration(MultipartFile file);

  /**
   * 文本分析
   */
  CompletableFuture<Map<String, Object>> analyzeText(String text);

  /**
   * 文本翻译
   */
  CompletableFuture<String> translateText(String text, String targetLang);

  /**
   * 文本内容安全检测
   */
  CompletableFuture<Boolean> isTextSafe(String text);

  /**
   * 图片压缩
   * 
   * @param quality 压缩质量(0-1)
   */
  CompletableFuture<byte[]> compressImage(MultipartFile file, double quality);

  /**
   * 添加水印
   * 
   * @param file     原图文件
   * @param text     水印文字
   * @param gravity  水印位置(northwest/north/northeast/west/center/east/southwest/south/southeast)
   * @param dissolve 透明度(1-100)
   * @param dx       水平边距
   * @param dy       垂直边距
   */
//  CompletableFuture<byte[]> addWatermark(MultipartFile file, String text,
//      String gravity, Integer dissolve, Integer dx, Integer dy);

  /**
   * 图片格式转换
   * 
   * @param format 目标格式(jpg/png/gif等)
   */
  CompletableFuture<byte[]> convertImageFormat(MultipartFile file, String format);

  /**
   * ocr文字识别
   * @param file
   */
  Result ocr(MultipartFile file,String fileMd5);
}